package com.db.dao;

import java.util.ArrayList;
import java.util.Locale;

import utils.Falha;
import utils.db.DatabaseStarter;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class FalhasDAO {
	
	private DatabaseStarter db;
	private static final String TABLE_FALHAS = "ucopa_falhas";
	private static final String TABLE_FALHAS_LOCAIS = "ucopa_falhas_locais";
	private static final String TABLE_FALHAS_CATEGORIAS = "ucopa_falhas_categorias";
	private static final String TABLE_FALHAS_FONTES = "ucopa_falhas_fontes";
	private static final String TABLE_FALHAS_LOCAIS_INTERNOS = "ucopa_falhas_locais_internos";
	private static String KEY = "id";

	private String lang = Locale.getDefault().getLanguage().toString();

	// FALHAS
	private static final String CREATE_TABLE = "CREATE TABLE "
		+ TABLE_FALHAS + "(" + KEY + " INTEGER PRIMARY KEY," + "idregistro"
		+ " INTEGER," +  "idusuario" + " INTEGER," + "idlocal" + " INTEGER," + 
		"idlocalinterno" + " INTEGER," + "idcategoria" + " INTEGER," + 
		"idfonte" + " INTEGER," + "data_ocorrencia" + " TEXT," + 
		"hora TEXT, duracao_aproximada" + " TEXT," + "duracao_naosei" + " TEXT," +
		"hashtags" + " TEXT," + "descricao" + " TEXT," + "foto" + " TEXT," +
		"fotoimg" + " TEXT,"+ "status TEXT, novafonte TEXT, lasteditDate TEXT)";

	public FalhasDAO(DatabaseStarter db) {
		this.db = db;
	}

	public void insere(Falha f) {
		SQLiteDatabase database = this.db.getWritableDatabase();
		ContentValues values = new ContentValues();

		//values.put("id", f.id);
		values.put("idregistro", f.idregistro);
		values.put("idusuario", f.idusuario); 
		values.put("idlocal", f.idlocal);
		values.put("idlocalinterno", f.idlocalinterno);
		values.put("idcategoria", f.idcategoria);
		values.put("idfonte", f.idfonte);
		values.put("data_ocorrencia", f.data_ocorrencia);
		values.put("hora", f.hora);
		values.put("duracao_aproximada", f.duracao_aproximada);
		values.put("duracao_naosei", f.duracao_naosei);
		values.put("hashtags", f.hashtags);
		values.put("descricao", f.descricao);
		values.put("foto", f.foto);
		values.put("status", f.status);
		values.put("lasteditDate", f.lasteditDate);
		values.put("foto", f.foto);
		values.put("fotoimg", f.fotoimg);

		database.insert(TABLE_FALHAS, null, values);
		db.close();
	}

	public ArrayList<Falha> retorna (String status) {
		String where = (status == "OFFLINE") ? "WHERE " + TABLE_FALHAS +".status='OFFLINE'" : "";
		ArrayList<Falha> falhas = new ArrayList<Falha>();
		String selectQuery = "" +
				"SELECT " +
				TABLE_FALHAS + ".*," +
				TABLE_FALHAS_LOCAIS + ".title as local," +
				TABLE_FALHAS_LOCAIS + ".title_en as local_en," +
				TABLE_FALHAS_LOCAIS_INTERNOS + ".title as localinterno," +
				TABLE_FALHAS_LOCAIS_INTERNOS + ".title_en as localinterno_en," +
				TABLE_FALHAS_CATEGORIAS + ".title as categoria," +
				TABLE_FALHAS_CATEGORIAS + ".title_en as categoria_en," +
				TABLE_FALHAS_FONTES + ".fonte " +
				"FROM " + TABLE_FALHAS + " " +
				"LEFT JOIN " + TABLE_FALHAS_LOCAIS + " ON " + TABLE_FALHAS_LOCAIS + ".id=" + TABLE_FALHAS + ".idlocal " +
				"LEFT JOIN " + TABLE_FALHAS_LOCAIS_INTERNOS + " ON " + TABLE_FALHAS_LOCAIS_INTERNOS + ".id=" + TABLE_FALHAS + ".idlocalinterno " +
				"LEFT JOIN " + TABLE_FALHAS_CATEGORIAS + " ON " + TABLE_FALHAS_CATEGORIAS + ".id=" + TABLE_FALHAS + ".idcategoria " +
				"LEFT JOIN " + TABLE_FALHAS_FONTES + " ON " + TABLE_FALHAS_FONTES + ".id=" + TABLE_FALHAS + ".idfonte " +
				where + " ORDER BY " + TABLE_FALHAS + ".id DESC";
				//" + TABLE_FALHAS + ".idregistro='1'
		//selectQuery = "SELECT * FROM "+TABLE_FALHAS;
		//System.out.println(selectQuery);

		SQLiteDatabase database = this.db.getReadableDatabase();
		Cursor c = database.rawQuery(selectQuery, null);
 
		// looping through all rows and adding to list
		if (c.moveToFirst()) {
			do {
				Falha fl = new Falha();
				fl.id = c.getInt(c.getColumnIndex("id"));
				fl.idregistro = c.getInt(c.getColumnIndex("idregistro"));
				fl.idusuario = c.getInt(c.getColumnIndex("idusuario"));
				fl.idlocal = c.getInt(c.getColumnIndex("idlocal"));
				fl.idlocalinterno = c.getInt(c.getColumnIndex("idlocalinterno"));
				fl.idcategoria = c.getInt(c.getColumnIndex("idcategoria"));
				fl.idfonte = c.getInt(c.getColumnIndex("idfonte"));
				fl.data_ocorrencia = c.getString(c.getColumnIndex("data_ocorrencia"));
				fl.hora = c.getString(c.getColumnIndex("hora"));
				fl.duracao_aproximada = c.getString(c.getColumnIndex("duracao_aproximada"));
				fl.duracao_naosei = c.getString(c.getColumnIndex("duracao_naosei"));
				fl.hashtags = c.getString(c.getColumnIndex("hashtags"));
				fl.descricao = c.getString(c.getColumnIndex("descricao"));
				fl.foto = c.getString(c.getColumnIndex("foto"));
				fl.fotoimg = c.getString(c.getColumnIndex("fotoimg"));
				fl.novafonte = c.getString(c.getColumnIndex("novafonte"));
				fl.status = c.getString(c.getColumnIndex("status"));
				fl.lasteditDate = c.getString(c.getColumnIndex("lasteditDate"));

				// Campos do JOIN
				if (lang.equalsIgnoreCase("en")){
					fl.local = c.getString(c.getColumnIndex("local_en"));
					fl.localinterno = c.getString(c.getColumnIndex("localinterno_en"));
					fl.categoria = c.getString(c.getColumnIndex("categoria_en"));
				}else{
					fl.local = c.getString(c.getColumnIndex("local"));
					fl.localinterno = c.getString(c.getColumnIndex("localinterno"));
					fl.categoria = c.getString(c.getColumnIndex("categoria"));
				}
				fl.fonte = c.getString(c.getColumnIndex("fonte"));

				falhas.add(fl);
			} while (c.moveToNext());
		}

		db.close();
		return falhas;
	}

	public void setPostado(){
		String query = "UPDATE "+TABLE_FALHAS+" SET status='POSTADO';";
		
		SQLiteDatabase database = db.getWritableDatabase();
		database.execSQL(query);
		db.close();
	}
	
	public void deleta() {
		SQLiteDatabase database = this.db.getWritableDatabase();
		database.execSQL("DROP TABLE IF EXISTS " + TABLE_FALHAS);
		database.execSQL(CREATE_TABLE);
		db.close();
	}

}